75.584 Minería de datos

PEC 3

Estudiante: Erika Martínez Soria

Exploración del conjunto de datos

Verificamos la estructura del juego de datos principal.

Obtenemos el numero de filas y columnas del conjunto de datos.

Vemos que tenemos 21 variables y 1000 registros.

A continuacion, tenemos el número de columnas y sus nombres.

Las variables parecen tener completos los datos para los 1000 registros.

Revisamos la descripción de las variables.

checking_balance: (qualitative) Status of existing checking account

months_loan_duration: (numerical) Duration in month

credit_history: (qualitative) Credit history

purpose: (qualitative) Purpose

amount: (numerical) Credit amount

savings_balance: (qualitative) Savings account/bonds

employment_length: (qualitative) Present employment since

installment_rate: (numerical) Installment rate in percentage of disposable income

personal_status: (qualitative) Personal status and sex

other_debtors: (qualitative) Other debtors / guarantors

residence_history: (numerical) Present residence since

property: (qualitative) Property

age: (numerical) Age in years

installment_plan: (qualitative) Other installment plans

housing: (qualitative) Housing

existing_credits: (numerical) Number of existing credits at this bank

job: (qualitative) Job

dependents: (numerical) Number of people being liable to provide maintenance for

telephone: (qualitative) Telephone

foreign_worker: (qualitative) foreign worker

default: (qualitative) Variable objetivo

Preprocesamiento y gestión de características

Limpieza

El siguiente paso será la limpieza de datos, mirando si hay valores vacíos o nulos, y outliers

No hay valores nulos en ninguna de las variables del conjunto de datos.

Revisamos mas en detalle los datos de las variables con su resumen estadistico.

Variables numéricas

Variables categóricas

Variable objetivo

1 es No Dafault y 2 es Default. La mayoría de casos es No Default, es decir, que se ha pagado el crédito. Los casos de la categoría 2 que son los Default son los que han entrado en impago.

Boxplots de variable numéricas

Al analizar los boxplots, en algunas variables existen outliers. Sin embargo, estos parecen ser válidos y no errores. Por ejemplo, la variable edad tiene el valor máximo de 75 que se muestra en el boxplot como outlier, este es completamente válido ya que una persona si puede llegar a tener esta edad. También en el caso de la variable amount, los outliers comienzan desde la cantidad de 7882.375 DM hasta el máximo de 18424 DM, siendo valores válidos de créditos.

Covarianza y correlación

Covarianza

Creamos una matriz de covarianza de las variables de numéricas.

La covarianza entre las variables con valores positivos sugiere que las variables cambian en la misma dirección.

Mientras que la covarianza entre las variables con valores negativos, lo que indica es que las variables cambian en dirección contraria.

Correlación

Creamos una matriz de correlación.

La correlación entre la mayoría de variables es baja, la única que se puede destacar como alta es entre la variable amount y months_loan_duration con 0.62.

Grado de asociación

Fuente: https://www.kaggle.com/code/chrisbss1/cramer-s-v-correlation-matrix/notebook

Escogemos solo las variables categoricas.

Utilizamos Label Encoding para codificar las variables categoricas y colocarlas en numeros enteros.

Construimos la función V de Cramer

Contruimos la matriz

Agregamos un mapa de calor a la matriz

Los valores de la V de Cramér (https://en.wikipedia.org/wiki/Cramér%27s_V) entre 0.1 y 0.3 nos indican que la asociación estadística es baja, y entre 0.3 y 0.5 se puede considerar una asociación media. Finalmente, si los valores fueran superiores a 0.5, la asociación estadística entre las variables sería alta.

Como podemos observar en el mapa de calor no existe una asociación estadística alta entre las variables categóricas, el mayor valor es el de 0.31 entre las variables property y housing.

EDA

Se observa que la mayoría de personas de la categoría unknown y >200 DM son No default. Mientras que en las categorias 1-200 DM y <0 DM alrededor de la mitad son Default y la otra mitad son No default.

Vemos que existen más créditos para carros nuevos, radios/tv y muebles. En estas tres categorías la mayoría se pagan. En el caso de carros nuevos es donde hay mas impagos comparado con las otras dos categorias.

La mayoría de créditos lo tienen personas con menos de 100 DM en su savings balance. De estos la mayoría son No default, pero un porcentaje alto son Default. En la categoría unknown la mayoría son No default.

Analizando el historial crediticio, la mayoría de personas están en un categoría critica o repagado. De estas categorías, la mayoría son No default. Las categorías completamente repagado y completamente repagado a este banco tienen su la mayoría de casos como Default.

La mayoría de personas con créditos son mujeres u hombres solteros. En estas dos categorías la mayoría son No default. En la categoría hombre divorciado aproximadamente la mitad es Default

Preparación y creación del árbol de decisión

Arbol de decisión preliminario

Separación del conjunto de datos en variables dependiente e independiente

Para hacer el árbol de decisión, primero separamos el conjunto de datos en dos partes: las columnas de datos que se usan para hacer las clasificaciones y la columna que queremos predecir. En este caso, la variable que queremos predecir se llama default y tiene como valores el pago o impago de créditos bancarios.

Revisamos otra vez los tipos de datos de las variables de X.

Como ya conociamos, tenemos 7 variables numericas y el resto son categoricas. Debemos recordar que los arboles de decision no soportan datos categoricos. Por lo tanto, para usar las variables categoricas en el arbol de decision, debemos convertir estas variables en variables binarias y para realizar esto usamos One Hot Encoding.

Como vemos, cada categoria de las variables categoricas se han convertido en una variable por si misma, teniendo el valor de 1 o 0. Asi vemos que hay 61 columnas en total en nuestro conjunto de datos.

Contrucción de un árbol de decisión preliminario

Ahora clasificamos el conjunto de datos en datos de entrenamiento y datos de testeo. Utilizamos 2/3 de los datos para entrenamiento y 1/3 para testear.

Mostramos el arbol creado con los datos de entrenamiento de todas las variables del conjunto de datos.

Como vemos es un arbol de decision grande y necesita ser optimizado.

Las reglas generales que podemos observar en el árbol son:

Con una matriz de confusion, vemos como actuan los datos del conjunto de testeo en el arbol recien creado.

En la matriz de confusion, vemos que de las 174 + 55 = 229 personas que no estaban en impago, 174 (76%) fueron correctamente clasificadas. Mientras que de las 54 + 47 = 101 personas que estan en impago, solo 47 (47%) fueron clasificadas correctamente. La exactitud es del 67%.

Ahora vemos otros valores de evaluacion del arbol:

El árbol tiene una exactitud media y no reacciona muy bien especialmente al predecir la categoría default (no pago) prediciendo correctamente solo el 47% de las personas que realmente no han pagado. Como se menciona en la fuente de donde se obtuvo el conjunto de datos https://archive.ics.uci.edu/ml/datasets/statlog+(german+credit+data), es peor si personas que no han pagado se clasifican como que si han pagado que personas que si han pagado se clasifiquen como que no han pagado.

Por lo tanto, el arbol puede ser mejorado utilizando las variables que mas impacto tienen en la prediccion de pago o impago de la variable default. Tambien puede ser que se haya sobreajustado (overfit) a los datos de entrenamiento. Para resolver esta situacion, necesitariamos podar el arbol.

Nivel de importancia de las variables

Podemos obtener informacion de que tanta influencia ha tenido cada variable en la prediccion de pago o impago.

Árbol de decisión optimizado

Decidimos desordenar los datos del conjunto original, con el fin de prevenir que algunos datos se encuentren en cierto orden, asegurando que haya diversidad en el grupo de entrenamiento como en el de testeo, y de esa manera obtener un mejor resultado en la creación y testeo del árbol.

Separación del conjunto de datos en variables dependiente e independiente

Con los datos desordenados, ahora escogemos solo las variables que tuvieron mayor importancia en la predicción de pago o impago. Del conjunto original de datos (sin codificar), decidimos escoger 5 variables númericas (amount, age, months_loan_duration, residence_history, installment_rate) y 7 variables categoricas (checking_balance, purpose, job, credit_history, employment_length, savings_balance, property).

Codificamos nuevamente las variables categóricas del nuevo conjunto de datos con el número reducido de variables.

Como vemos ahora, con las selección de 12 de las 20 variables para la clasificación, la codificación ha resultado en 42 columnas en total, en comparación de las 61 variables en la codificación realizada anteriormente.

Contrucción de un árbol de decisión optimizado

De nuevo, clasificamos el conjunto de datos en datos de entrenamiento y datos de testeo. Utilizamos 2/3 de los datos para entrenamiento y 1/3 para testear.

El árbol sigue siendo bastante extenso, lo cual lo mejoraremos en los siguientes pasos.

Las reglas generales que podemos observar en el árbol son:

Con este nuevo árbol, al haber utilizado solo las variables más importantes, la clasificación parece haber empeorado ligeramente. De las 170 + 57 = 227 personas que han pagado, 170 (75%) han sido correctamente clasificados. Mientras que de las 56 + 47 = 103 personas que estan en impago, solo 47 (46%) fueron clasificadas correctamente. Dando una exactitud de 66%.

Vemos otros valores de evaluacion del modelo.

Ahora vemos si al podar el árbol esta clasificación mejora.

Poda de complejidad de costos: Visualización de alpha

Los árboles de decisión son notorios por sobreajustar (overfit) los datos de entrenamiento, y existen varios parámetros como max_depth y min_samples, los cuales están diseñados para reducir el sobreajuste. Sin embargo, podar el árbol con complejidad de costos puede simplificar todo el proceso al encontrar un árbol más pequeño que mejore la precisión con el conjunto de datos de testeo.

Podar el árbol de decisión se trata de encontrar el valor correcto para el parámetro de poda alpha, el cual controla que tan poco o mucho se poda. Una manera para encontrar el valor más óptimo de alpha is el de graficar la precisión del árbol como función de diferentes valores. Haremos esto para el conjunto de datos de entrenamiento y de testeo.

Primero, extraemos los diferentes valores de alpha que están disponibles para este árbol y construimos un árbol podado para cada valor de alpha.

Nota: Omitimos el máximo valor de alpha con ccp_alphas=ccp_alphas[:-1] porque se podarían todas las hojas, dejandonos con solo la raíz en vez de un árbol.

Fuente: https://www.youtube.com/watch?v=q90UDEgYqeI

Ahora graficamos la precisión de los árboles usando el conjunto de datos de entrenamiento y el conjunto de datos de testeo como una función de alpha.

Vemos que, por ejemplo, cuando alpha es igual a 0 el conjunto de datos de entrenamiento responde bien, pero no el conjunto de datos de testeo. Mientras alpha aumenta, la precisión de testeo mejora. El mejor valor parece ser alrededor de 0.005.

Dado que hay muchas maneras en las que pudimos haber dividido el conjunto de datos originales en datos de entrenamiento y de testeo, usamos validación cruzada para asegurarnos de esto.

Poda de complejidad de costos: Validacion cruzada para encontrar el mejor alpha

En vez de solo escoger un conjunto de datos de entrenamiento y otro de testeo, usamos validacion cruzada para encontrar el valor optimo de ccp_alpha, ya que este es sensible a conjuntos de datos.

Fuente: https://www.youtube.com/watch?v=q90UDEgYqeI

Usando validacion cruzada podemos ver que el ccp_alpha necesita ser alrededor de 0.005. Podemos encontrar el valor exacto con:

Basandonos en la grafica y los valores exactos podemos ver que el mejor valor para ccp_alpha es 0.005174, asi que lo guardamos en una variable para usarlo en el modelo.

Modelo final de arbol de decision

Ahora que tenemos el mejor valor de alpha, lo utilizamos al crear el árbol de decisión usando ccp_alpha=ideal_ccp_alpha.

Ahora dibujamos otra matriz de confusion para ver si el arbol podado es mejor.

Vemos que la clasificación si ha mejorado. De las 185 + 42 = 227 personas que han pagado, 185 (81%) han sido correctamente clasificados. Mientras que de las 51 + 52 = 103 personas que estan en impago, 52 (50%) fueron clasificadas correctamente.

Vemos a continuación algunas de las medidas de evaluación de la clasificación del árbol de decisión.

Dibujamos el arbol de decision final.

Obtención de reglas del modelo

Fuente: https://mljar.com/blog/extract-rules-decision-tree/

Recordemos que la clase 1 representa No default (se paga el crédito) y la clase 2 representa Default (no se paga el crédito).

En las siguientes instancias se paga el crédito (No default):

En las siguientes instancias no se paga el crédito (Default):

De manera general:

Conclusiones

El primer árbol en el que utilizamos todas las variables tiene un rendimiento medio, en este 76% de las personas que han pagado se clasifican correctamente, 47% de las personas que no han pagado se clasifican correctamente y se obtiene un exactitud del 67%.

En el segundo árbol, en el que utilizamos 12 de las 20 variables, el rendimiento bajó ligeramente comparado con el anterior árbol. En este 75% de las personas que han pagado se clasifican correctamente, 46% de las personas que no han pagado se clasifican correctamente y se obtiene un exactitud del 66%.

Finalmente, en el tercer árbol, que utiliza 12 de las 20 variables y además está podado, el rendimiento mejora. En este árbol 81% de las personas que han pagado se clasifican correctamente, 50% de las personas que no han pagado se clasifican correctamente y se obtiene un exactitud del 72%.

Como fue mencionado anteriormente, es más importante el clasificar las personas que no han pagado correctamente, que el clasificar las personas que han pagado correctamente. Aunque el tercer árbol es el que mejor rinde en este aspecto, aún así solo se llegó al 50% de clasificación correcta en los clientes que no pagaron.